package com.campusbackend.service;

import com.campusbackend.entity.Notifications;
import com.campusbackend.entity.vo.NotificationCreateVO;
import com.campusbackend.entity.vo.NotificationDetailVO;
import com.campusbackend.entity.vo.NotificationListVO;
import com.campusbackend.entity.vo.NotificationConfirmVO;
import com.baomidou.mybatisplus.extension.service.IService;

import java.util.List;

/**
 * <p>
 * 队伍通知表 服务类
 * </p>
 *
 * @author yezi
 * @since 2025-07-26
 */
public interface NotificationsService extends IService<Notifications> {

    /**
     * 发布通知
     *
     * @param createVO 通知创建对象
     * @param publisherType 发布者类型：1-教师，2-学生
     * @param publisherId 发布者ID
     * @param publisherName 发布者姓名
     * @return 发布结果
     */
    String publishNotification(NotificationCreateVO createVO, Byte publisherType, Long publisherId, String publisherName);

    /**
     * 获取队伍通知列表
     *
     * @param teamId 队伍ID
     * @param currentUserType 当前用户类型：1-教师，2-学生
     * @param currentUserId 当前用户ID
     * @return 通知列表
     */
    List<NotificationListVO> getTeamNotifications(Long teamId, Byte currentUserType, Long currentUserId);

    /**
     * 获取通知详情
     *
     * @param notificationId 通知ID
     * @param currentUserType 当前用户类型：1-教师，2-学生
     * @param currentUserId 当前用户ID
     * @return 通知详情
     */
    NotificationDetailVO getNotificationDetail(Long notificationId, Byte currentUserType, Long currentUserId);

    /**
     * 确认通知
     *
     * @param confirmVO 确认对象
     * @param confirmerType 确认者类型：1-教师，2-学生
     * @param confirmerId 确认者ID
     * @param confirmerName 确认者姓名
     * @return 确认结果
     */
    String confirmNotification(NotificationConfirmVO confirmVO, Byte confirmerType, Long confirmerId, String confirmerName);

    /**
     * 删除通知
     *
     * @param notificationId 通知ID
     * @param currentUserType 当前用户类型：1-教师，2-学生
     * @param currentUserId 当前用户ID
     * @return 删除结果
     */
    String deleteNotification(Long notificationId, Byte currentUserType, Long currentUserId);

    /**
     * 验证用户是否为队伍成员
     *
     * @param teamId 队伍ID
     * @param userType 用户类型：1-教师，2-学生
     * @param userId 用户ID
     * @return 是否为队伍成员
     */
    boolean isTeamMember(Long teamId, Byte userType, Long userId);
}
